<Project>
  <Target Name="_FindPythonWindows"
          Condition="$([MSBuild]::IsOSPlatform(Windows)) and '$(PYTHON)' == ''"
          Returns="$(PYTHON)">
    <PropertyGroup>
      <_PythonLocationScript>-c "import sys; sys.stdout.write(sys.executable)"</_PythonLocationScript>
    </PropertyGroup>
    <Exec Command="py -3 $(_PythonLocationScript) 2&gt; nul || python3 $(_PythonLocationScript) 2&gt; nul || python $(_PythonLocationScript) 2&gt; nul"
          StandardOutputImportance="Low"
          EchoOff="true"
          ContinueOnError="ErrorAndContinue"
          ConsoleToMsBuild="true">
      <Output TaskParameter="ConsoleOutput" PropertyName="PYTHON" />
    </Exec>
  </Target>
  <Target Name="_FindPythonUnix"
          Condition="!$([MSBuild]::IsOSPlatform(Windows)) and '$(PYTHON)' == ''"
          Returns="$(PYTHON)">
    <Exec Command="command -v python3 || command -v python || command -v py"
          StandardOutputImportance="Low"
          EchoOff="true"
          ContinueOnError="ErrorAndContinue"
          ConsoleToMsBuild="true">
      <Output TaskParameter="ConsoleOutput" PropertyName="PYTHON" />
    </Exec>
  </Target>
  <Target Name="FindPython" DependsOnTargets="_FindPythonWindows;_FindPythonUnix">
      <Error Condition="'$(PYTHON)' == ''"
             Text="Python not found. Please add Python 3 to your path and try again."/>
  </Target>
</Project>
